package com.yt.claim.server.api.cms;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yt.claim.models.dto.ClaimQueryDTO;
import com.yt.claim.models.dto.ClaimUpdateDTO;
import com.yt.claim.models.service.ClaimService;
import com.yt.claim.models.vo.ClaimVO;
import com.yt.claim.models.vo.ClaimPageVO;
import com.yt.common.constant.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/claim/cms")
public class ClaimCmsController {

    @Autowired
    private ClaimService claimService;

    /**
     * 查询索赔详情（含更多管理端字段）
     *
     * @param id 索赔ID
     * @return 索赔详情
     */
    @GetMapping("/{id}")
    public Result<ClaimVO> getClaimById(@PathVariable Integer id) {
        ClaimVO claimVO = claimService.queryClaimById(id);
        return Result.success(claimVO);
    }

    /**
     * 更新索赔状态、审核意见等
     *
     * @param id 索赔ID
     * @param dto 更新参数
     * @return 是否更新成功
     */
    @PutMapping("/{id}")
    public Result<Boolean> updateClaim(@PathVariable Integer id, @RequestBody ClaimUpdateDTO dto) {
        dto.setClaimId(id);
        boolean result = claimService.updateClaim(dto);
        return Result.success(result);
    }

    /**
     * 分页查询全量索赔列表，支持多条件筛选
     *
     * @param dto 查询条件
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    @GetMapping("/page")
    public Result<ClaimPageVO> pageQueryClaims(ClaimQueryDTO dto,
                                               @RequestParam(defaultValue = "1") Integer pageNum,
                                               @RequestParam(defaultValue = "10") Integer pageSize) {
        // 创建分页对象
        Page<ClaimVO> page = new Page<>(pageNum, pageSize);
        // 调用服务进行分页查询
        IPage<ClaimVO> resultPage = claimService.pageQueryClaims(dto, page);

        // 构造返回结果
        ClaimPageVO claimPageVO = new ClaimPageVO();
        claimPageVO.setTotal(resultPage.getTotal());
        claimPageVO.setList(resultPage.getRecords());

        return Result.success(claimPageVO);
    }
}